---
layout: landing
title: Telepresence
permalink: /
---

<header class="hero">
  <div class="logo">
  <img src="{{site.baseurl}}/images/logo.png" style="width: 200px;">
  <h3>Telepresence</h3>
  <h4>Fast, realistic local development for Kubernetes and OpenShift Origin microservices</h4>
  </div>
</header>

<div class="container">
    <p style="font-size: 150%; text-align: center; text-style: bold;">Do you want to...</p>
    <ul style="font-size: 150%; list-style: none; text-align: center;">
        <li>... <a href="/tutorials/kubernetes-client.html">transparently connect to a Kubernetes cluster?</a></li>
        <li>... <a href="/tutorials/kubernetes-rapid.html">rapidly develop a new service?</a></li>
        <li>... <a href="/tutorials/kubernetes.html">debug a Kubernetes service locally?</a></li>
        <li>... <a href="/tutorials/openshift.html">use Telepresence with OpenShift?</a></li>
    </ul>
    <br>
    <br>
</div>

<div class="container">
  <h5>
    <ul class="fa-ul">
      <li><i class="fa-li fa fa-fighter-jet"></i><strong>Fast dev cycle:</strong> no more waiting for your whole deployment pipeline to finish just to try a small change! A local process on your laptop is exposed via a Service in your Kubernetes or OpenShift staging cluster (a local minikube or a cluster in the cloud.)</li>
      <li><i class="fa-li fa fa-external-link-square"></i><strong>Realistic environment:</strong>
        transparently access other microservices in a Kubernetes or OpenShift cluster, as well as cloud resources like AWS RDS. Your code can also read the same environment variables and volumes a normal Kubernetes pod would have.</li>
      <li><i class="fa-li fa fa-wrench"></i><strong>Use your own tools:</strong> edit, run and debug your code locally, just as you would any other application.</li>
    </ul></h5>
</div>

<div style="margin: auto; width: 25%;">
  <h5><em>Telepresence is under active development; subscribe to get updates and announcements:</em></h5>
  <!--[if lte IE 8]>
    <script charset="utf-8" type="text/javascript" src="https://js.hsforms.net/forms/v2-legacy.js"></script>
  <![endif]-->
  <script charset="utf-8" type="text/javascript" src="https://js.hsforms.net/forms/v2.js"></script>
  <script>
   hbspt.forms.create({
     css: '',
     portalId: '485087',
     formId: '956287a4-7614-486b-91bd-28c9a91949cb'
   });
  </script>
</div>

<div class="container">
  <h5><br><strong>How it works:</strong><br>Telepresence substitutes a proxy image for your normal container in the Kubernetes cluster. Your local code gets transparent access to the Kubernetes network by using <a href="https://www.datawire.io/code-injection-on-linux-and-macos/">LD_PRELOAD</a> to hijack TCP connections and reroute them through that proxy pod, bootstrapping off of <tt>kubectl port-forward</tt>. Volumes are proxied using <tt>sshfs</tt>.</h5>
</div>

<div class="container">
  <h5><br><strong>Get started in 3 minutes:</strong><br>
    <ol>
      <li><a href="/tutorials/kubernetes.html">Install locally</a> with Homebrew, apt or dnf.</li>
      <li>Run <tt>telepresence -m inject-tcp -n test --run-shell</tt>.</li>
      <li>You now have a shell that proxies network connections to Kubernetes!</li>
    </ol><br>
  </h5>
  <center><script type="text/javascript" src="https://asciinema.org/a/117761.js" id="asciicast-117761" async></script></center>

</div>


<div class="container">
  <p style="text-align: center;">Telepresence is sponsored by Project Blackbird, helping you <a href="https://datawire.io">deploy microservices on Kubernetes in AWS</a> <img src="{{site.baseurl}}/images/blackbird.png" style="width: 4em; vertical-align: middle; align: right;"></p>
</div>
